#pragma once

#include "../umlmodel_global.h"

#include "Abstraction.h"

namespace uml {

/// <summary>
/// Realization
/// Realization is a specialized Abstraction relationship between two sets of model
/// Elements, one representing a specification (the supplier) and the other
/// represents an implementation of the latter (the client). Realization can be used
/// to model stepwise refinement, optimizations, transformations, templates, model
/// synthesis, framework composition, etc.
/// </summary>
class UMLMODEL_EXPORT Realization : public Abstraction {

public: // Constructors and destructors
    explicit Realization(const QString& umlType="uml::Realization");

public: // JsonSerializable override
    void fromJson(const QJsonObject& json, QStringList& errorList) override;
    void toJson(QJsonObject& json) override;

};

} // namespace uml
